﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Elysium.Demo;
using SIIE_ERP.View;
using SIIE_ERP.Codigo;
using SIIE_FE_Class;
using System.IO;
using SIIE_ERP.BaseDatos.Configuracion.Empresa;
using SIIE_ERP.BaseDatos;

namespace Elysium.Demo.Configuracion.Empresa.FacturacionElectronica
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class Certificado_Edita : UserControl, IPropiedadesNavegacion
    {

        ////////////////////////////////////////////////////////////////////////////
        //  PROPIEDADES DE NAVEGACION
        public string Texto { get { return _texto; } }
        public TabControl TabControlPadre { get { return _tabControlPadre; } }
        public TabItem TabItemPadre { get { return _tabItemPadre; } }

        private string _texto;
        private TabControl _tabControlPadre;
        private TabItem _tabItemPadre;

        public void setParametros(string Texto, ref TabControl tabControl, ref TabItem tabItem)
        {
            this._texto = Texto; this._tabControlPadre = tabControl; this._tabItemPadre = tabItem;
        }

        private void ButtonRegresar_Click(object sender, RoutedEventArgs e)
        {
            _tabControlPadre.Items.Remove(_tabItemPadre);
        }
        // FIN DE PROPIEDADES DE NAVEGACION
        ///////////////////////////////////////////////////////////////////////////

        private UsuarioActivo _sesion;
        private Int32 Id;

        public Certificado_Edita(UsuarioActivo usuario, string Id)
        {
            InitializeComponent();
            this._sesion = usuario;
            this.Id = Int32.Parse(Id);
            CargarDatos();
        }

        private void CargarDatos()
        {
            var db = new SIIE_ERP.BaseDatos.Configuracion.Empresa.dbo_Cat_Empresa_Certificado_FE(_sesion.RFC, _sesion.UserName);
            var dato = db.Get_Empresa_Certificado_FE_Por_Id(this.Id).Rows[0];

            TextBox_Nombre.Text = dato["Nombre"].ToString();           
        }

        private void ButtonInformacion_Click_1(object sender, RoutedEventArgs e)
        {
            WindowAyuda Ayuda = new Elysium.Demo.WindowAyuda("FacturaElectronica.htm", "Ayuda");
            Ayuda.Owner = SIIE_ERP.View.NavegacionUI.GetParentWindow(this); Ayuda.ShowDialog();
        }

        private void Button_Cancelar_Click(object sender, RoutedEventArgs e)
        {
            _tabControlPadre.Items.Remove(_tabItemPadre);
        }

        private void ButtonCER_Click(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();


            dlg.DefaultExt = ".cer";
            dlg.Filter = "cer Files (*.cer)|*.cer";

            // Muestra el Open File Dialog
            Nullable<bool> result = dlg.ShowDialog();

            // Obtiene el archivo
            if (result == true)
            {
                // Open document 
                string filename = dlg.FileName;
                TextBox_CER.Text = filename;
            }
        }

        private void ButtonKEY_Click(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();


            dlg.DefaultExt = ".key";
            dlg.Filter = "key Files (*.key)|*.key";

            // Muestra el Open File Dialog
            Nullable<bool> result = dlg.ShowDialog();

            // Obtiene el archivo
            if (result == true)
            {
                // Open document 
                string filename = dlg.FileName;
                TextBox_KEY.Text = filename;
            }
        }

        private void Button_Guardar_Click(object sender, RoutedEventArgs e)
        {
            bool IsError = false;
            LabelErrors.Content = "";

            if (String.IsNullOrEmpty(TextBox_CER.Text))
            {
                LabelErrors.Content = "Favor de seleccionar el archivo .cer";
                IsError = true;
            }
            else if (String.IsNullOrEmpty(TextBox_KEY.Text))
            {
                LabelErrors.Content = "Favor de seleccionar el archivo .key";
                IsError = true;
            }
            else if (String.IsNullOrEmpty(TextBox_Password.Password))
            {
                LabelErrors.Content = "Favor de ingresar su contraseña";
                IsError = true;
            }
            else if (String.IsNullOrEmpty(TextBox_Nombre.Text))
            {
                LabelErrors.Content = "Favor de asignar un nombre al certificado";
                IsError = true;
            }

            if (!IsError)
            {
                CFDx.VersionCFD Version = CFDx.VersionCFD.CFDv3_2;

                CFDx CFDs = new CFDx();

                CFDs.Comprobante(
                    Version,
                    "123",
                    DateTime.Parse(String.Format("{0:s}", DateTime.Now)),
                    "EN UNA SOLA EXHIBICION",
                    190,
                    190 * 1.16,
                    SIIE_FE_Class.ComprobanteTipoDeComprobante.ingreso,
                    "TRANSFERENCIA",
                    "México DF"
                );

                CFDs.AgregaEmisor(
                    "AAAA780220AAA",
                    "Norte 56",
                    "Gustavo A. Madero",
                    "DF",
                    "México",
                    "44150",
                    Nombre: "Juan Manuel Orduña"
                );

                CFDs.AgregaReceptor(
                    "AAAA780220AAA",
                    "Paquito Arroyo Vargas",
                    "Iztapalapa",
                    "DF",
                    "Iztapalapa",
                    "México",
                    "44320",
                    "746",
                    Colonia: "ZONA OBLATOS"
                );

                CFDs.AgregaRegimenFiscal("REGIMEN INTERMEDIO", "REGIMEN GENERAL");

                CFDs.AgregaConcepto(2, "PZA", "CAJA 48Z", 50);
                CFDs.AgregaConcepto(1, "MT", "SINTETICO AFRICA NEGRO", 60);
                CFDs.AgregaConcepto(10, "PZA", "REPUESTO PLATA", 3);

                FileStream fs_CER = null;
                fs_CER = File.OpenRead(TextBox_CER.Text);
                byte[] bytes_CER = new byte[fs_CER.Length];
                fs_CER.Read(bytes_CER, 0, Convert.ToInt32(fs_CER.Length));

                FileStream fs_KEY = null;
                fs_KEY = File.OpenRead(TextBox_KEY.Text);
                byte[] bytes_KEY = new byte[fs_KEY.Length];
                fs_KEY.Read(bytes_KEY, 0, Convert.ToInt32(fs_KEY.Length));

                string Errores = "";

                if (!CFDs.CreaFacturaXML(bytes_KEY, TextBox_Password.Password, bytes_CER, ref Errores))
                {
                    LabelErrors.Content = "No Concuerdan los archivos .cer y .key ingresados con la contraseña ingresada. Favor de verificar.";
                }
                else
                {
                    dbo_Cat_Empresa_Certificado_FE Cat_Cer = new dbo_Cat_Empresa_Certificado_FE(_sesion.RFC, _sesion.UserName);
                    Respuesta r = Cat_Cer.Update_Empresa_Certificado_FE_Por_Id(this.Id, TextBox_Nombre.Text, bytes_CER, bytes_KEY, TextBox_Password.Password);

                    if (r.Id == 1)
                    {
                        MessageBox.Show("Certificado editado correctamente");
                        _tabControlPadre.Items.Remove(_tabItemPadre);
                    }
                    else
                    {
                        MessageBox.Show(r.Mensaje);
                    }
                }
            }
        }
    }
}
